package day06;

import java.util.HashMap;
import java.util.Map;
import java.util.Set;

/*
Map：类似python中的字典。
     key:value 的形式存放。根据key查找value。
     key是不允许重复的

Map是接口，HashMap、TreeMap、……
 */
public class Demo01 {
    public static void main(String[] args) {
        // <String, String> key的类型，value的类型
        Map<String, String> map = new HashMap<>();

        // 添加元素
        map.put("CNY", "人民币");
        map.put("USD", "美元");
        map.put("JPY", "日元");
        map.put("HKD", "港币");
        map.put("GBP", "英镑");

        System.out.println(map);
        // 修改元素的值
        map.put("CNY", "Chinese Yuan");
        System.out.println(map);
        // 删除元素
        map.remove("USD");
        System.out.println(map);

        // 查找
        System.out.println(map.containsKey("USD"));
        System.out.println(map.containsValue("人民币"));

        // 根据key取value
        System.out.println(map.get("CNY"));

        // 遍历map，获取map中所有的key，根据key取value
        Set<String> keys = map.keySet(); // map中key是用Set来存储的
        for (String k : keys) {
            System.out.println("key:" + k + ",value:" + map.get(k));
        }

        // map的长度
        System.out.println(map.size());

        getCount("aaabbcccd");
        // {'a':3, 'b':2, 'c':3, 'd':1}
    }

    /*
    定义一个静态方法，输入一个字符串，统计每个字符出现的次数。
     */
    public static Map<Character, Integer> getCount(String src) {
        Map<Character, Integer> ret = new HashMap<>(); // 存放结果的map

        for (int i = 0; i < src.length(); i++) {// 遍历字符串中每个字符
            char c = src.charAt(i); // 获取一个字符
            System.out.println("当前处理的字符为：" + c);

            if (!ret.containsKey(c)) { // 如果不包含这个字符
                // 将key，value=1放到map中
                System.out.println("当前map为：" + ret + "," + c + "在map中不存在");
                ret.put(c, 1);
                System.out.println("将" + c + "加入后，map为" + ret);
            } else { // 如果包含这个字符
                // 根据key取出value，将value+1后，再放入map
                System.out.println("当前map为：" + ret + "," + c + "在map中存在");
                int value = ret.get(c);
                ret.put(c, value + 1);
                System.out.println("将" + c + "的值增加1后，map为" + ret);
            }
        }

        return ret;
    }
}
